home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995…tember: Reference Library / Dev.CD Sep 95 RL / Dev.CD Sep 95 RL.toast / mac / Technical Documentation / develop / develop Issue 6 code / TCP / NewsWatcher / NW Source / Source / glob.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-11  |  35.9 KB  |  889 lines  |  [TEXT/MMCC]

  1. /*----------------------------------------------------------------------------
  2.  
  3.     glob.h
  4.  
  5.     This file contains global constant, type, and variable definitions.
  6.     
  7.     Copyright © 1994-1995, Northwestern University.
  8.  
  9. ----------------------------------------------------------------------------*/
  10.  
  11. #include <Aliases.h>
  12.  
  13. #include "def.h"
  14. #include "arrowpair.h"
  15.  
  16.  
  17.  
  18. /* Constants. */
  19.  
  20. /*#define kDevelopmentVersion    1*/            /* comment out this line for the release version */
  21.  
  22. #define kLDEFProc            128            /* resource id of our custom LDEF */
  23.  
  24. #define kTextMargin            4            /* pixel margin for all text windows */
  25.  
  26. #define kNewsWatcherSignature            'NNTP'        /* NewsWatcher's signature */
  27. #define kSavedUserGroupListFileType        'NEWS'        /* user group list file type */
  28. #define kSavedMessageFileType            'TEXT'        /* saved message file type */
  29. #define kPrefsFileType                    'PREF'        /* preferences file type */
  30.  
  31. #define kOpenTypeList        "NEWSTEXT"    /* list of file types we can open */
  32. #define kNumOpenTypeList    2            /* number of file types we can open */
  33.  
  34. #define kuuUndoCreatorType                'uuUN'
  35. #define kExpanderCreatorType            'SITx'
  36.  
  37. #define kGetURLEventClass                'GURL'
  38. #define kGetURLEventID                    'GURL'
  39. #define kGetURLToFileKeyword            'dest'
  40.  
  41. #define kMaxSchemeNameLen                31            /* max length of scheme name */
  42.  
  43.  
  44. /* Strings in STR# id=128 resource. */
  45.  
  46. #define kStringResourceID        128
  47.  
  48. #define kStrVersion                                1
  49. #define kStrTabStops                            2
  50. #define kStrAboutWindTitle                        3
  51. #define kStrServerInfoWindTitle                    4
  52. #define kStrMemoryLow                            5
  53. #define kStrCancelingNofMStatusMsg                6
  54. #define kStrSectionMessageFormat                7
  55. #define kStrNoneOpened                            8
  56. #define kStrSomeNotOpened                        9
  57. #define kStrNoRefs                                10
  58. #define kStrPrefsFileName                        11
  59. #define kStrArticleNotFound                        12
  60. #define kStrFrom                                13
  61. #define kStrOrg                                    14
  62. #define kStrDate                                15
  63. #define kStrNewsgroups                            16
  64. #define kStrArticleXofY                            17
  65. #define kStrCancelingStatusMsg                    18
  66. #define kStrNotCanceled                            19
  67. #define kStrNoMsgID                                20
  68. #define kStrDuplicateCopiesOfHelper                21
  69. #define kStrMustRestartIC                        22
  70. #define kStrCantFindURLHelper                    23
  71. #define kStrOutOfMemory                            24
  72. #define kStrAuthFailed                            25
  73. #define kStrOpeningOTStatusMsg                    26
  74. #define kStrSortingStatusMsg                    27
  75. #define kStrReadingStatusMsg                    28
  76. #define kStrCheckingNewStatusMsg                29
  77. #define kStrCheckingDelStatusMsg                30
  78. #define kStrScrapTooBig                            31
  79. #define kStrNoDelGroups                            32
  80. #define kStrGetFullStatusMsg                    33
  81. #define kStrNewGroups                            34
  82. #define kStrFullGroupList                        35
  83. #define kStrSelGroupNoUnread                    36
  84. #define kStrSelGroupNoArt                        37
  85. #define kStrNoneUnread                            38
  86. #define kStrNoArts                                39
  87. #define kStrUntitled                            40
  88. #define kStrOneGroup                            41
  89. #define kStrNGroups                                42
  90. #define kStrShowFullGroupList                    43
  91. #define kStrHideFullGroupList                    44
  92. #define kStrShowHeader                            45
  93. #define kStrHideHeader                            46
  94. #define kStrQuoteStr1                            47
  95. #define kStrQuoteStr2                            48
  96. #define kStrQuoteStr3                            49
  97. #define kStrByWayOfFmt                            50
  98. #define kStrNoSubject                            51
  99. #define kStrOneNotCanceled                        52
  100. #define kStrTo                                    53
  101. #define kStrSubject                                54
  102. #define kStrCc                                    55
  103. #define kStrBcc                                    56
  104. #define kStrReplyto                                57
  105. #define kStrFollowupto                            58
  106. #define kStrKeywords                            59
  107. #define kStrDistribution                        60
  108. #define kStrExtraNewsHeaderLines                61
  109. #define kStrExtraMailHeaderLines                62
  110. #define kStrSignature                            63
  111. #define kStrPostOKMailErr                        64
  112. #define kStrTooManyGroups                        65
  113. #define kStrTrunc                                66
  114. #define kStrURLHelperNotFound                    67
  115. #define kStrURLHelperNoMem                        68
  116. #define kStrScrapTooBigMaxIs32767                69
  117. #define kStrNoMoreChars                            70
  118. #define kStrChecking                            71
  119. #define kStrOpeningConnectionStatusMsg            72    
  120. #define kStrServerInfoFmt                        73
  121. #define kStrURLHelperUnexpectedErr                74
  122. #define kStrSyntaxErr                            75
  123. #define kStrNotInFullGroupList                    76    
  124. #define kStrGroupDeletedOnServer                77
  125. #define kStrMissingGroupName                    78
  126. #define kStrCheckingForNewArticlesStatusMsg        79
  127. #define kStrQuoteString                            80
  128. #define kStrDirFull                                81
  129. #define kStrGettingGroupListFromHostStatusMsg    82
  130. #define kStrGetFromHostWindowTitle                83
  131. #define kStrNoneCanceled                        84
  132. #define kStrSaveGroupListAs                        85
  133. #define kStrSendingGroupListToHostStatusMsg        86
  134. #define kStrSizeofTPrefRecBadFmt                87
  135. #define kStrOpeningMacTCPStatusMsg                88
  136. #define kStrCouldNotOpenMacTCP                    89
  137. #define kStrStartupError                        90
  138. #define kStrOldPrefsFileName                    91
  139. #define kStrReallyOldPrefsFileName                92
  140. #define kStrDiskFull                            93
  141. #define kStrPersonalNWFolder                    94
  142. #define kStrCantFindDefaultURLHelper            95
  143. #define kStrUnexpectedErr                        96
  144. #define kStrDefaultTextFileOwner                97
  145. #define kStrDefaultNewsrcFileName                98
  146. #define kStrPrintingSample                        99
  147. #define kStrGroupSubjectSample                    100    
  148. #define kStrArtMsgSample                        101    
  149. #define kStrMustRestart                            102    
  150. #define kStrPrintNoPagesInRange                    103
  151. #define kStrSaveArticlePrompt                    104    
  152. #define kStrSaveMessagePrompt                    105
  153. #define kStrDiskIOErr                            106
  154. #define kStrDefaultSearchHdr                    107
  155. #define kStrSearchingStatusMsg                    108
  156. #define kStrNoMatches                            109
  157. #define kStrSearchWindowTitle                    110
  158. #define kStrMustCheckAnIcon                        111
  159. #define kStrMustSupplySubject                    112
  160. #define kStrMustSupplyNewsgroup                    113
  161. #define kStrMustSupplyRecipient                    114
  162. #define kStrPostingMessageStatusMsg                115
  163. #define kStrMailingMessageStatusMsg                116
  164. #define kStrFolderSelectNothing                    117
  165. #define kStrFolderSelectFmt                        118
  166. #define kStrStatusWindowTitle                    119    
  167. #define kStrHelperTooOld                        120
  168. #define kStrStatusCancelButtonName                121
  169. #define kStrLogFileName                            122
  170. #define kStrGettingSubjectsAndAuthorsStatusMsg    123
  171. #define kStrGetSubjectsStatusMsg                124
  172. #define kStrSelArticleDoesntExist                125
  173. #define kStrNoneExist                            126
  174. #define kStrSomeDontExist                        127
  175. #define kStrOneArt                                128
  176. #define kStrNArts                                129
  177. #define kStrSomeGroupsNotInFullGroupList        130
  178. #define kStrDragTextTooBig                        131
  179. #define kStrDragTextBadChar                        132
  180. #define kStrDamagedCache                        133
  181. #define kStrFileLockedOrBusy                    134
  182. #define kStrLogOpenMsg                            135
  183. #define kStrNewsWatcherVersion                    136
  184. #define kStrLogLegend                            137
  185. #define kStrLogCantOpen                            138
  186. #define kStrLogClosed                            139
  187. #define kStrScrapBadChar                        140
  188. #define kStrNoMoreTyping                        141
  189. #define kStrDelGroupsWindTitle                    142
  190. #define kStrNews                                143
  191. #define kStrMail                                144
  192. #define kStrFTP                                    145
  193. #define kStrVolLocked                            146
  194. #define kStrNNotCanceled                        147
  195. #define kStrNewsWatcher                            148
  196. #define kStrGettingAndSavingArticle                149
  197. #define kStrGettingAndSavingArticleNofM            150
  198. #define kStrDefaultArtFoldNotFound                151
  199. #define kStrDefaultMsgFoldNotFound                152
  200. #define kStrMessageBodyTruncated                153
  201. #define kStrMessageFieldTruncated                154
  202. #define kStrHqxDecodeHelperName                    155
  203. #define kStrDownloadFoldNotFound                156
  204. #define kStrDownloadTempFilePrefix                157
  205. #define kStrDownloadTempFilePrompt                158
  206. #define kStrGettingAndSavingFile                159
  207. #define kStrGettingAndSavingPartNofM            160
  208. #define kStrCantFindDecodeHelper                161
  209. #define kStrDecodeHelperNoMem                    162
  210. #define kStrDecodeHelperUnexpectedErr            163
  211. #define kStrDecodePartsMissing                    164
  212. #define kStrGettingAndSavingArtAofBPartNofM        165
  213. #define kStrArtHasNoAttachedFile                166
  214. #define kStrAllSelectedArtsHaveMissingParts        167
  215. #define kStrOneArtSkippedNoAttachedFile            168
  216. #define kStrNArtsSkippedNoAttachedFile            169
  217. #define kStrOneArtSkippedMissingParts            170
  218. #define kStrNArtsSkippedMissingParts            171
  219. #define kStrExtractBinariesManuallyDlgLabel        172
  220. #define kStrExtractBinariesManuallyTooMuchCellData    173
  221. #define kStrTempFileName                        174
  222. #define kStrBadScrapData                        175
  223. #define kStrDuplicateGroups                        176
  224. #define kStrOneDuplicateGroup                    177
  225. #define kStrMoving                                178
  226. #define kStrPasting                                179
  227. #define kStrDragTextTooBigMaxIs32767            180
  228. #define kStrGroupDragTooBigMaxIs32767            181
  229. #define kStrDiskWriteProtected                    182
  230. #define kStrArtNotOnServer                        183
  231. #define kStrOneArtSkippedNotOnServer            184
  232. #define kStrNArtsSkippedNotOnServer                185
  233. #define kStrUUDecodeHelperName                    186
  234. #define kStrPrinting                            187
  235. #define kStrGettingAndPrinting                    188
  236. #define kStrGettingAndPrintingNofM                189
  237. #define kStrPrintedFor                            190
  238. #define kStrSaveFileAsPrompt                    191
  239. #define kStrNoNewsgroupsHeader                    192
  240. #define kStrTooManySubjects                        193
  241. #define kStrTooManyPrefsFileGroups                194
  242. #define kStrTooManyGroupsOnServer                195
  243. #define kStrBadPrefs                            196
  244. #define kStrDamagedPrefsFileName                197
  245. #define kStrPrintNoDriver                        198
  246. #define kStrNoPrinterSelected                    199
  247. #define kStrNntpURLSyntaxError                    200
  248. #define kStrAddingInitialSubscribedGroups        201
  249. #define kStrFloppyLocked                        202
  250. #define kStrFloppyEraseFailed                    203
  251. #define kStrCouldNotOpenOT                        204
  252. #define kStrArticleOrGroupNotFound                205
  253. #define kStrURLSyntaxError                        206
  254. #define kStrNotAnApplication                    207
  255. #define kStrDesktopDatabaseDamaged                208
  256. #define kStrMustSupplyBody                        209
  257. #define kStrOnlyQuotedText                        210
  258. #define kStrBadEmailAddress                        211
  259. #define kStrCopyAlsoPostedTo                    212
  260. #define kStrNewsIconLabel                        213
  261. #define kStrMailIconLabel                        214
  262. #define kStrSelfIconLabel                        215
  263. #define kStrCantRedefineBuiltinURLs                216
  264. #define kStrURLSchemeAlreadyDefined                217
  265. #define kStrBadURLHelperPrefs                    218
  266. #define kStrBody                                219
  267.  
  268.  
  269.  
  270. /* Types. */
  271.  
  272. typedef enum TWindowKind {
  273.     kGroup,                        /* group list window */
  274.     kSubject,                    /* subject list window */
  275.     kArticle,                    /* article window */
  276.     kMessage,                    /* message window */
  277.     kText,                        /* text window */
  278.     kHelp,                        /* help window */
  279.     kStatus,                    /* status window */
  280.     kDialog,                    /* dialog window */
  281.     kDummy,                        /* dummy window */
  282.     kNotOurWind                    /* no window, or DA window */
  283. } TWindowKind;
  284.  
  285. #define kNumWindowKind kNotOurWind    /* number of window kinds */
  286.  
  287. typedef enum TGroupWindowKind {
  288.     kFullGroup,                    /* full group list window */
  289.     kNewGroup,                    /* new groups list window */
  290.     kUserGroup                    /* user group list window */
  291. } TGroupWindowKind;
  292.  
  293. typedef enum TAttachedFileKind {
  294.     kNoAttachedFile,            /* no attached file */
  295.     kArtNotOnServer,            /* article or part no longer on server */
  296.     kBinHex,                    /* BinHex */
  297.     kUUEncode                    /* uuencode */
  298. } TAttachedFileKind;
  299.  
  300. typedef char TURLSchemeName[kMaxSchemeNameLen+1];
  301.  
  302. typedef struct TOldURLHelperInfo {        /* for pre-version 2.0b25 prefs files */
  303.     OSType sig;                            /* signature of helper program */
  304.     unsigned long versionNumber;        /* version number */
  305.     unsigned long lastMod;                /* last mod date/time */
  306. } TOldURLHelperInfo;
  307.  
  308. typedef struct TURLHelperInfo {
  309.     TURLSchemeName schemeName;            /* scheme name */
  310.     OSType sig;                            /* signature of helper program */
  311.     unsigned long versionNumber;        /* version number */
  312.     unsigned long lastMod;                /* last mod date/time */
  313. } TURLHelperInfo;
  314.  
  315. typedef struct TDispatch {
  316.     void (*activate)(WindowPtr wind, Boolean act);
  317.     void (*update)(WindowPtr wind);
  318.     OSErr (*mouse)(WindowPtr wind, Point where, short modifiers);
  319.     Boolean (*draggable)(WindowPtr wind, Point where, short modifiers);
  320.     OSErr (*key)(WindowPtr wind, unsigned char theChar, unsigned char theKey, short modifiers);
  321.     OSErr (*grow)(WindowPtr wind, Point where);
  322.     OSErr (*zoom)(WindowPtr wind, short zoomDir);
  323.     OSErr (*command)(WindowPtr wind, short menu, short item, short modifiers);
  324.     OSErr (*close)(WindowPtr wind);
  325.     void (*idle)(WindowPtr wind, RgnHandle cursorRgn);
  326.     void (*help)(WindowPtr wind, Point where);
  327. } TDispatch;
  328.  
  329. typedef enum TMsgFieldLabelKind {
  330.     kNoMsgFieldLabel,            /* no message window label for this field */
  331.     kMsgFieldLabelLeft,            /* message window field has label on left */
  332.     kMsgFieldLabelTop            /* message window field has label on top in italics */
  333. } TMsgFieldLabelKind;
  334.  
  335. typedef struct THeader {
  336.     long number;                /* article number */
  337.     long offset;                /* offset in strings of header text */
  338. } THeader;
  339.  
  340. typedef struct TUnread {
  341.     long firstUnread;            /* first unread message */
  342.     long lastUnread;            /* last unread message */
  343.     struct TUnread **next;        /* handle to next entry in list */
  344. } TUnread;
  345.  
  346. typedef struct TGroup {
  347.     long nameOffset;            /* offset in gGroupNames of group name string */
  348.     long firstMess;                /* # of first msg in group */
  349.     long lastMess;                /* # of last msg in group */
  350.     TUnread **unread;            /* handle to list of unread messages for group */
  351.     long numUnread;                /* number of unread articles in group */
  352.     char status;                /* a general purpose status "marker" used in
  353.                                    several contexts */
  354.     Boolean onlyRedrawCount;    /* true to tell LDEF to only redraw the unread
  355.                                    message count */
  356. } TGroup;
  357.  
  358. typedef struct TSubject {
  359.     long subjectOffset;            /* offset in strings block of subject string */
  360.     long authorOffset;            /* offset in strings block of author string */
  361.     long number;                /* article number */
  362.     short threadHeadIndex;        /* index of first article in thread in
  363.                                    subject array. */
  364.     short threadOrdinal;        /* article ordinal in thread (1,2,3,...) */
  365.     short threadLength;            /* total number of articles in thread */
  366.     short nextInThread;            /* index in subject array of next subject 
  367.                                    in this thread, or -1 if none. */
  368.     short partNum;                /* part number, or 0x7fff if not a part */
  369.     short numParts;                /* number of parts, or 0x7fff if not a part */
  370.     Boolean collapsed;            /* true if thread collapsed */
  371.     Boolean read;                /* true if article has been read */
  372.     Boolean incomplete;            /* true if incomplete part of multiple part article */
  373.     Boolean complete;            /* true if part of multiple part article and thread
  374.                                    is now complete (contains all parts, and at least
  375.                                    one part from cache) */
  376.     Boolean inList;                /* true if part of subject window list */
  377.     Boolean drawTriangleFilled;    /* true to tell LDEF to draw triangle filled with 
  378.                                    black. */
  379.     Boolean onlyRedrawTriangle;    /* true to tell LDEF to only redraw the
  380.                                    triangle */
  381.     Boolean onlyRedrawCheck;    /* true to tell LDEF to only redraw the √ */
  382. } TSubject;
  383.  
  384. typedef struct TChild {
  385.     WindowPtr childWindow;        /* pointer to child window */
  386.     struct TChild **next;        /* handle to next entry in list */
  387. } TChild;
  388.  
  389. typedef struct TMsgFieldInfo {
  390.     TEHandle edit;                    /* handle to TextEdit record for field */
  391.     short top;                        /* top coord of field */
  392.     short bottom;                    /* bottom coord of field */
  393.     short nLines;                    /* number of TextEdit lines in field */
  394.     Boolean sepLine;                /* true if field preceded by gray separator line */
  395.     TMsgFieldLabelKind labelKind;    /* kind of label for this field */
  396.     unsigned char label[60];        /* P-format field label, if any */
  397. } TMsgFieldInfo;
  398.  
  399. typedef struct TDialogItemInfo {
  400.     Boolean validChars[256];        /* set of valid printable chars in field */
  401.     Boolean numeric;                /* true if numeric field */
  402.     Boolean returnIsLegal;            /* true if CR is legal in field */
  403.     short popupTypeinItem;            /* item number of partner typein field for popup item,
  404.                                        or 0 if none */
  405.     char keyEquivalent;                /* command key equivalent for button, or 0 if none */
  406.     short maxLength;                /* max length of field */
  407.     char *password;                    /* pointer to password if password field, or nil */
  408.     Boolean readOnly;                /* true if read only scrolling field */
  409.     TEHandle theTE;                    /* textedit handle for scrolling field, or nil
  410.                                        if none */
  411.     ControlHandle vScroll;            /* handle to vertical scroll bar control if scrolling
  412.                                        field, or nil if none */
  413. } TDialogItemInfo;
  414.  
  415. #pragma options align=mac68k
  416. typedef struct TSavedWindPos {
  417.     Boolean valid;                    /* true if valid, else use default pos */
  418.     Boolean zoomed;                    /* true if window zoomed */
  419.     Boolean oldFormat;                /* true if old format (pre-2.0b4): 
  420.                                        userState.topLeft valid,
  421.                                        all other fields not used */
  422.     Rect userState;                    /* saved window user state */
  423. } TSavedWindPos;
  424. #pragma options align=reset
  425.  
  426. typedef struct TWindow {
  427.  
  428.     /* Fields used by all kinds of windows. */
  429.  
  430.     TWindowKind kind;            /* kind of window */
  431.     Boolean windPosValid;        /* true if window position should be saved
  432.                                    and restored */
  433.     Boolean movedSinceLastSave;    /* true if window has been moved or resized
  434.                                    or zoomed since the last time its position
  435.                                    was saved on the document file */
  436.     
  437.     /* Fields used only by group, subject, article, message, and text windows */
  438.  
  439.     short panelHeight;            /* height of panel area */
  440.     
  441.     /* Fields used only by group, subject, article, message, help, and text windows */
  442.     
  443.     ControlHandle vScroll;        /* handle to vertical scroll bar */
  444.     
  445.     /* Fields used only by group windows. */
  446.     
  447.     TGroupWindowKind groupKind;    /* kind of group window */
  448.     TGroup **groupArray;        /* handle to group array */
  449.     short numGroups;            /* number of groups */
  450.     
  451.     /* Fields used only by article and subject windows. */
  452.  
  453.     WindowPtr parentWindow;        /* pointer to parent window */
  454.     Boolean windPosLocked;        /* true if window position is locked */
  455.     
  456.     /* Fields used only by group and subject windows. */
  457.     
  458.     ListHandle theList;            /* list handle */
  459.     TChild **childList;            /* handle to linked list of child windows */
  460.     
  461.     /* Fields used only by user group and message windows */
  462.     
  463.     Boolean changed;            /* true if window contents changed */
  464.     AliasHandle alias;            /* handle to alias for saved file if saved, else nil */
  465.     
  466.     /* Fields used only by article, message, and text windows. */
  467.     
  468.     TEHandle theTE;                /* TextEdit handle */
  469.     
  470.     /* Fields used only by article and message windows. */
  471.     
  472.     Boolean showDetails;        /* true if details shown */
  473.     
  474.     /* Fields used only by help windows. */
  475.     
  476.     short pictResID;            /* 'PICT' resource id for window */
  477.     ArrowPairRef helpArrowPair;    /* arrow pair reference */
  478.     
  479.     /* Fields used only by user group windows. */
  480.     
  481.     Handle unsubscribed;        /* handle to list of unsubscribed groups */
  482.     Boolean autoFetched;        /* true if autofetched from host */
  483.     short groupNameHCoord;        /* h coord of group name */
  484.     short numUnreadHCoord;        /* h coord of num unread articles */
  485.     Boolean okToCloseIfChanged;    /* true if ok to close window with changes without saving */
  486.     
  487.     /* Fields used only by subject windows. */
  488.     
  489.     TSubject **subjectArray;    /* handle to subject array  */
  490.     short numSubjects;            /* number of subjects in array */
  491.     short numSubjectsInList;    /* number of subjects in list */
  492.     Handle strings;                /* handle to subject and author strings */
  493.     short maxSubjectWidth;        /* width in pixels of longest subject line, or 
  494.                                    0 if not yet computed */
  495.     long firstFetched;            /* article number of first article fetched */
  496.     long groupNameOffset;        /* offset in gGroupNames of group name */
  497.     short parentGroup;            /* index in groupArray of parent group window */
  498.     Boolean authorsShown;        /* true if authors shown */
  499.     short minusSignHCoord;        /* h coord of minus sign */
  500.     short threadCountHCoord;    /* h coord of thread count */
  501.     short checkHCoord;            /* h coord of check mark */
  502.     short authorHCoord;            /* h coord of author */
  503.     short authorWidth;            /* width of author field */
  504.     short subjectHCoord;        /* h coord of subject */
  505.     short autoExpandedThread;    /* index in subject array of first article in thread
  506.                                    which was most recently autoexpanded by a Find or
  507.                                    Find Next command, or -1 if none */
  508.     PolyHandle expandTriangle;    /* handle to expanded triangle polygon */
  509.     PolyHandle collapseTriangle;/* handle to collapsed triangle polygon */
  510.     long **sortByNumber;        /* handle to array of offsets to elements of subject
  511.                                    array sorted by article number */
  512.     
  513.     /* Fields used only by article windows. */
  514.     
  515.     Handle fullText;            /* handle to full article text */
  516.     short maxBodyLineWidth;        /* width in pixels of longest body line, truncated
  517.                                    to 80 * max char width, or 0 if not yet computed */
  518.     short numBodyLines;            /* number of lines in body, or 0 if maxLineWidth = 0 */
  519.     short numSections;            /* number of sections */
  520.     short curSection;            /* current section */
  521.     long **sectionBreaks;        /* handle to array of section breaks, or nil
  522.                                    if none */
  523.     Handle msgId;                /* handle to msgId if opened by id, or nil */
  524.     short parentSubject;        /* index in subjectArray of parent subject window */
  525.     ControlHandle hScroll;        /* handle to horizontal scroll bar, or nil if none */
  526.     Boolean attachedFile;        /* true if article has an attached file */
  527.     Boolean showFollowupTo;        /* true to display Followup-To header in panel area */
  528.     Boolean showReplyTo;        /* true to display Reply-To header in panel area */
  529.     ArrowPairRef sectionArrowPair;    /* section arrow pair reference */
  530.     ArrowPairRef nextPrevArrowPair;    /* next/prev arrow pair reference */
  531.     short threadInfoWidth;        /* width of "Article x of y" message in panel area */
  532.     Handle groupName;            /* handle to group name, or nil if opened by id */
  533.     long number;                /* article number if not opened by id */
  534.     Boolean flagReqd;            /* true if when fetched from server BinHex or uuencode
  535.                                    text was required to have a special "begin" flag line */
  536.     
  537.     /* Fields used only by message windows. */
  538.     
  539.     Boolean newsIcon;            /* true if news icon checked */
  540.     Boolean mailIcon;            /* true if mail icon checked */
  541.     Boolean selfIcon;            /* true if self icon checked */
  542.     ControlHandle sendButton;    /* handle to "Send" button control */
  543.     ControlHandle tabCheckbox;    /* handle to tab stops checkbox control */
  544.     ControlHandle wrapCheckbox;    /* handle to wrap checkbox control */
  545.     TEHandle tabField;            /* handle to tab stops field */
  546.     TEHandle quoteStringField;    /* handle to quote string field */
  547.     TEHandle newsgroupsField;    /* handle to "Newsgroups" field */
  548.     TEHandle toField;            /* handle to "To" field */
  549.     TEHandle subjectField;        /* handle to "Subject" field */
  550.     TEHandle ccField;            /* handle to "Cc" field */
  551.     TEHandle bccField;            /* handle to "Bcc" field */
  552.     TEHandle replytoField;        /* handle to "Reply-To" field */
  553.     TEHandle followuptoField;    /* handle to "Followup-To" field */
  554.     TEHandle keywordsField;        /* handle to "Keywords" field */
  555.     TEHandle distributionField;    /* handle to "Distribution" field */
  556.     TEHandle extraNewsField;    /* handle to extra news header lines field */
  557.     TEHandle extraMailField;    /* handle to extra mail header lines field */
  558.     TEHandle signatureField;    /* handle to signature field */
  559.     Handle references;            /* handle to "References" header contents */
  560.     Handle from;                /* handle to "From" header contents for redirected mail msg */
  561.     TMsgFieldInfo **fields;        /* handle to array of field info */
  562.     short numFields;            /* number of fields */
  563.     short firstScrollingField;    /* index if fields array of first scrolling field */
  564.     short curField;                /* index in fields array of current field */
  565.     short labelRight;            /* right coord of header field labels */
  566.     Boolean tabEnabled;            /* true if body tabs currently enabled for this window */
  567.     Boolean wrapOnSend;            /* true to wrap message before sending it */
  568.     short tabStops;                /* current tab stops for this window */
  569.     Boolean showLabels;            /* true to show labels under 3 icons in panel area */
  570.     short iconPanelHeight;        /* heigth of icon panel */
  571.     short optionsPanelHeight;    /* height of options panel */
  572.     Boolean isFollowup;            /* true if message is a followup */
  573.     
  574.     /* Fields used only by dialog windows. */
  575.     
  576.     Boolean movableModal;        /* true if dialog is movable modal */
  577.     short defaultItem;            /* item number of default button, or 0 if none */
  578.     Boolean defaultOutline;        /* true if default button outlined */
  579.     short cancelItem;            /* item number of cancel button, or 0 if none */
  580.     short curItem;                /* item number of currently active scrolling text field,
  581.                                    or 0 if none */
  582.     TDialogItemInfo    **itemInfo;    /* handle to array of item information */
  583.                                    
  584.     /* Fields used only by text windows. */
  585.     
  586.     void (*drawPanel)(WindowPtr);    /* pointer to panel drawing function, or nil if none */
  587.     
  588. } TWindow;
  589.  
  590. #pragma options align=mac68k
  591. typedef struct TPrefRec {
  592.  
  593.     /* Original 1.0.2 prefs. */
  594.  
  595.     Str255 newsServerName;            /* name of news server */
  596.     Str255 textFont;                /* name of textedit font */
  597.     short textSize;                    /* size of textedit font */
  598.     Str255 listFont;                /* name of list font */
  599.     short listSize;                    /* size of list font */
  600.     Point fullGroupWindowLocn;        /* saved top left full group window position
  601.                                        (defunct as of 2.0b4) */
  602.     Point unused0;                    /* unused (used to be bot right saved full group window pos */
  603.     Point unused1;                    /* unused (used to be stagerring offset) */
  604.     Point statusWindowLocn;            /* saved top left status window position */
  605.     short maxFetch;                    /* max. number of articles to fetch */
  606.     CStr255 ftpNewsrcUsername;        /* username for FTP transfers of newsrc files */
  607.     CStr255 ftpNewsrcHost;            /* host name for FTP transfers of newsrc files */
  608.     CStr255 fullName;                /* user's full name */
  609.     CStr255 organization;            /* user's organization */
  610.     char signature[4096];            /* user's signature */
  611.     Boolean fullGroupListVisible;    /* true if full group list window is visible */
  612.     Boolean unused2;                /* unused (used to be auto zoom windows) */
  613.     Boolean unused3;                /* unused (used to be offset winds from parent) */
  614.     Boolean unused4;                /* unused (used to be most recent first) */
  615.     Str255 mailServerName;            /* mail server name */
  616.     CStr255 emailAddress;            /* user's e-mail address */
  617.     
  618.     /*     Added in 1.2(NU) */
  619.     
  620.     char magicCookie[12];            /* magic cookie */
  621.     char versionString[12];            /* version string - used from version 1.2(NU) through
  622.                                        version 2.0d17. Empty string in version 2.0d18
  623.                                        and later versions. */
  624.     Boolean areYouSureAlert;        /* true to present are you sure alert on postings */
  625.                                    
  626.     /*    Added in 1.3d1 */
  627.     
  628.     Boolean autoFetchNewsrc;        /* auto get/put .newsrc file */
  629.     Boolean unused5;                /* unused (used to be CC self on email replies) */
  630.     
  631.     /*     Added in 1.3d4 */
  632.     
  633.     Boolean showArtHeaders;            /* true to show article headers by default */
  634.     Boolean showAuthors;            /* true to show authors in subject windows */
  635.     Boolean showThreadsCollapsed;    /* true to show threads collapsed by default */
  636.  
  637.     /* Added in 2.0d9 */
  638.     
  639.     Boolean checkForNewGroups;        /* Check for new newsgroups at startup */
  640.     Boolean unused6;                /* unused (used to be killed articles are shown 
  641.                                        but marked as read) */
  642.     unsigned long groupCheckTime;    /* The last time we checked for new groups */
  643.     char ftpNewsrcPassword[32];        /* Password for FTP transfers of newsrc files */
  644.     Boolean saveFtpNewsrcPassword;    /* True to save newsrc FTP password */
  645.     Boolean unused7;                 /* unused (used to be xpand threads with highlighted articles) */
  646.     OSType savedArtCreator;            /* Creator code for owning app of saved articles */
  647.     Str31 savedArtAppName;            /* Name of the app which owns saved articles */
  648.     Str31 DefunctSavedArtDefaultVolName;    /* Default volume to store saved articles (not used in
  649.                                        2.0d41 and later) */
  650.     long DefunctSavedArtDefaultDirID;        /* Default dir id to store saved articles (not used in
  651.                                        2.0d41 and later) */
  652.     short maxGroupNameWidth;        /* max group name width in current list font
  653.                                        and size, or 0 if needs to be recomputed */
  654.     Boolean    useXPAT;                /* use XPAT for searching if available */
  655.     
  656.     /* Added in 2.0d10 */
  657.     
  658.     Boolean savedArtDefaultFolder;    /* true if using default folder for saved articles */
  659.     char ftpNewsrcPath[32];            /* Path for FTP transfers of newsrc files */
  660.     
  661.     /* Added in 2.0d11 */
  662.     
  663.     Boolean addSigSeparatorLine;    /* true to add "-- " separator line before sig */
  664.     
  665.     /* Added in 2.0d12 */
  666.     
  667.     Boolean keypadShortcuts;        /* true if keypad shortcuts enabled */
  668.     Boolean logActionsToFile;        /* true if logging enabled */
  669.     
  670.     /* Added in 2.0d14 */
  671.     
  672.     Boolean batchedGroupCmds;        /* use batched GROUP commands */
  673.     Boolean noNewConnection;        /* don't establish new connection when checking for new articles */
  674.     Boolean noModeReader;            /* don't send MODE READER command */
  675.     
  676.     /* Added in 2.0d16 */
  677.     
  678.     Boolean reZoomWindows;            /* rezoom windows */
  679.     Boolean autoSaveOnQuit;            /* auto save on quit */
  680.     
  681.     /* Added in 2.0d18 */
  682.     
  683.     Boolean replyPost;                /* reply via posting */
  684.     Boolean replyEmail;                /* reply via email */
  685.     Boolean copySelf;                /* send copies to self */
  686.     Boolean showMsgDetails;            /* show message window details */
  687.     Boolean tabEnabled;                /* tabs enabled in message bodys */
  688.     short tabStops;                    /* tab stops */
  689.     char quoteString[11];            /* quote string */
  690.     CStr255 extraNewsHdrLines;        /* extra news header lines */
  691.     CStr255 extraMailHdrLines;        /* extra mail header lines */
  692.     
  693.     /* Added in 2.0d19 */
  694.     
  695.     unsigned long version;            /* version number of NewsWatcher which created this
  696.                                        prefs file, in 'vers' resource format */
  697.     Boolean addSigBlankLine;        /* add blank line before signature */
  698.     
  699.     /* Added in 2.0d21 */
  700.     
  701.     Point prefsLoc;                    /* location of preferences dialog */
  702.     Point unused8;                    /* unused (used to be location of about box dialog) */
  703.     Point hostLoc;                    /* location of remote host dialog */
  704.     Point servErrLoc;                /* location of news server error dialog */
  705.     Point searchLoc;                /* location of search dialog */
  706.     Point unused9;                    /* unused (used to be location of server info dialog) */
  707.     Point delGroupsLoc;                /* location of deleted groups dialog */
  708.     
  709.     /* Added in 2.0d24 */
  710.     
  711.     Boolean unused10;                /* unused (used to be fetch oldest/newest option */
  712.     Boolean wrapOnSend;                /* true to wrap messages before sending them */
  713.     
  714.     /* Added in 2.0d25. These prefs fields are defunct as of 2.0b17. They are
  715.        replaced by the new ftpHelperInfo field. */
  716.     
  717.     OSType ftpHelper;                /* Creator code for FTP helper program */
  718.     Str31 ftpHelperName;            /* Name of FTP helper program */
  719.     
  720.     /* Added in 2.0d26 */
  721.     
  722.     char authUsername[32];            /* authorization username */
  723.     char authPassword[32];            /* authorization password */
  724.     Boolean authSavePassword;        /* true to save authorization password */
  725.     Boolean authAtStartup;            /* true to authorize at startup, false to
  726.                                        authorize only when requested */
  727.     Point authLoc;                    /* location of authorization dialog */
  728.     
  729.     /* Added in 2.0d27 */
  730.     
  731.     Boolean authPrivateGroups;        /* true if private groups */
  732.     
  733.     /* Added in 2.0d39 */
  734.     
  735.     Boolean unused11;                /* unused (used to be saved article auto save option) */
  736.     
  737.     /* Added in 2.0d41 */
  738.     
  739.     Boolean savedMsgDefaultFolder;            /* true if using default folder for 
  740.                                                saved messages */
  741.     AliasHandle savedMsgDefaultFolderAlias;    /* reserved for handle to default 
  742.                                                saved message folder alias */
  743.     Boolean unused12;                        /* unused (used to be saved msg auto save option */
  744.     Boolean savedMsgDelAfterSend;            /* true to delete saved messages after sending them */
  745.     AliasHandle savedArtDefaultFolderAlias;    /* reserved for handle to default saved article
  746.                                                folder alias */
  747.     Boolean savedBinDefaultFolder;            /* true if using default folder for saved 
  748.                                                binaries */
  749.     AliasHandle savedBinDefaultFolderAlias;    /* reserved for handle to default saved binaries
  750.                                                folder alias */
  751.     OSType hqxHelper;                        /* creator code for BinHex helper program */
  752.     Str31 hqxHelperName;                    /* name of BinHex helper program */
  753.     
  754.     /* Added in 2.0d44 */
  755.     
  756.     OSType uuHelper;                    /* creator code for uudecode helper program */
  757.     Str31 uuHelperName;                    /* name of uudecode helper program */
  758.     Boolean keyboardShortcuts;            /* main keyboard shortcuts */
  759.     
  760.     /* Added in 2.0d48 */
  761.     
  762.     Boolean reuseArticleWinds;            /* reuse article windows */
  763.     Point autoFetchNewsrcLocn;            /* saved top left auto-fetched newsrc
  764.                                            window position (defunct as of 2.0b4) */
  765.  
  766.     /* Added in 2.0b4 */
  767.     
  768.     Boolean dontCoverFinderIcons;        /* don't cover Finder icons */
  769.     Boolean saveThreadsToSeparateFiles;    /* save threads to separate files */
  770.     Boolean appendIfFileAlreadyExists;    /* append if file already exists */
  771.     Boolean saveEncodedText;            /* save encoded text */
  772.     Boolean subjectWindPosLocked;        /* true if subject window pos locked */
  773.     Rect subjectWindLocn;                /* saved locked subject window pos */
  774.     Boolean articleWindPosLocked;        /* true if article window pos locked */
  775.     Rect articleWindLocn;                /* saved locked article window pos */
  776.     TSavedWindPos fullGroupWindPos;        /* saved full group window position */
  777.     TSavedWindPos autoFetchWindPos;        /* saved autofetch window position */
  778.     
  779.     /* Added in 2.0b12 */
  780.     
  781.     Boolean returnToSubjectWindow;        /* return to subject window at end of thread */
  782.     
  783.     /* Added in 2.0b14 */
  784.     
  785.     Boolean beepAtEndOfGroup;            /* beep at end of group
  786.                                            (defunct as of 2.0b27) */
  787.     Point findLoc;                        /* location of find dialog */
  788.     
  789.     /* Added in 2.0b15 */
  790.     
  791.     Boolean startFindAtBeginning;            /* true to start Find commmands at
  792.                                                  beginning of window */
  793.     Boolean savedUGLDefaultFolder;            /* true if useing default folder for
  794.                                                  saved user group lists */
  795.     AliasHandle savedUGLDefaultFolderAlias;    /* reserved for handle to default
  796.                                                saved user group list folder alias */
  797.     Point waitForDNRLoc;                    /* location of wait for DNR dialog */
  798.     
  799.     /* Added in 2.0b17 - defunct as of 2.0b25 */
  800.     
  801.     TOldURLHelperInfo ftpHelperInfo;        /* pre-2.0b25 ftp helper program info */
  802.     TOldURLHelperInfo httpHelperInfo;        /* pre-2.0b25 http helper program info */
  803.     TOldURLHelperInfo gopherHelperInfo;        /* pre-2.0b25 gopher helper program info */
  804.     TOldURLHelperInfo waisHelperInfo;        /* pre-2.0b25 wais helper program info */
  805.     TOldURLHelperInfo telnetHelperInfo;        /* pre-2.0b25 telnet helper program info */
  806.     TOldURLHelperInfo tn3270HelperInfo;        /* pre-2.0b25 tn3270 helper program info */
  807.     TOldURLHelperInfo fingerHelperInfo;        /* pre-2.0b25 finger helper program info */
  808.     TOldURLHelperInfo whoisHelperInfo;        /* pre-2.0b25 whois helper program info */
  809.     
  810.     /* Added in 2.0b21 */
  811.     
  812.     Str255 printingFont;                /* name of printing font */
  813.     short printingSize;                    /* size of printing font */
  814.     
  815.     /* Added in 2.0b22 */
  816.     
  817.     Boolean useInternetConfig;            /* true to use Internet Config */
  818.     
  819.     /* Added in 2.0b23 */
  820.     
  821.     Boolean useWebHelperForHtmlFiles;    /* true to use web (http) helper for .html ftp URLs */
  822.     TOldURLHelperInfo phHelperInfo;        /* pre-2.0b25 ph helper program info */
  823.     
  824.     /* Added in 2.0b25 */
  825.     
  826.     Point retryConnectLoc;                /* location of retry news server connect dialog */
  827.     Boolean showLabelsUnderIcons;        /* true to show labels under 3 msg window icons */
  828.     TURLHelperInfo **urlHelpers;        /* reserved for handle to array of URL helper info,
  829.                                            terminated by an entry with schemeName = empty
  830.                                            string. */
  831.                                            
  832.     /* Added in 2.0b27 */
  833.     
  834.     Boolean stopAtEndOfSubjectList;        /* true to stop at end of subject list */
  835.     Boolean beepAtEndOfLists;            /* true to beep at end of subject and group lists */
  836.  
  837.     char fill[132];                        /* for future expansion */
  838.     
  839. } TPrefRec, *TPrefPtr;
  840. #pragma options align=reset
  841.  
  842.  
  843.  
  844. /* Global variables. */
  845.  
  846. extern TDispatch gDispatch[kNumWindowKind];        /* dispatch table */
  847.  
  848. extern short gNumGroups;            /* number of newsgroups */
  849. extern TGroup **gFullGroupArray;    /* handle to full group array */
  850. extern Handle gGroupNames;            /* handle to group name strings */
  851. extern WindowPtr gFullGroupWindow;    /* pointer to full group list window */
  852. extern Boolean gFullGroupListDirty;    /* true if full group list dirty */
  853. extern Boolean gMustDoZoomOnShowFullGroupList;    /* true if full group list needs zooming */
  854.  
  855. extern TPrefRec gPrefs;                /* preferences */
  856.  
  857. extern CStr255 gAutoFetchHost;        /* autofetch host */
  858. extern CStr255 gAutoFetchUsername;    /* autofetch username */
  859. extern char gAutoFetchPassword[32];    /* autofetch password */
  860. extern char gAutoFetchPath[32];        /* autofetch path */
  861.  
  862. extern Boolean gDone;                /* flag set true upon program termination */
  863. extern Boolean gCancel;                /* flag set when user cancels an action */
  864. extern Boolean gStartupOK;            /* true if no errors during startup */
  865. extern Boolean gStartingUp;            /* true during startup */
  866. extern Boolean gPrefsFileFoundAtStartup;    /* true if prefs file found during startup */
  867. extern Boolean gLongOperation;        /* true during long operations */
  868. extern Boolean gInDialog;            /* true while in dialog */
  869. extern Boolean gInBackground;        /* background/foreground flag */
  870. extern Boolean gAEServer;            /* true while responding to Apple event */
  871. extern DialogPtr gMyCurDialog;        /* pointer to NewsWatcher's current dialog
  872.                                        window, or nil if none */
  873. extern Rect gDesktopExtent;            /* desktop extent */
  874. extern Cursor gIBeamCurs;            /* ibeam cursor */
  875. extern Cursor gWatchCurs;            /* watch cursor */
  876.  
  877. extern Boolean gHaveDragMgr;        /* true if Drag Manager is available */
  878. extern OSErr (*gDragPostProcessor)(void);    /* pointer to drag and drop post-processing
  879.                                                function, or nil if none */
  880. extern OSErr gDragErr;                /* Drag Manager handler error code. */
  881. extern Boolean gDidDrag;            /* true if did a drag and drop */
  882.  
  883. extern EventRecord gCurEvent;        /* current event being handled */
  884. extern EventRecord gPrevEvent;        /* previous event */
  885.  
  886. extern Boolean gHaveTEOutlineHilite;    /* true if TE outline hilight feature
  887.                                            is available */
  888.                                            
  889. extern CStr255 gFindPattern;            /* pattern for Find and Find Again commands */